#ifndef MATERIAL_H
#define MATERIAL_H

#include <QString>
#include <QDateTime>

/**
 * @brief 物料表实体类
 *
 * 该类对应数据库中的物料表，用于存储物料的基础信息，
 * 包括名称、型号、图片路径、库存数量及时间戳等核心属性，
 * 提供标准化的访问方法以实现属性的安全操作与管理。
 */
class Material
{
private:
    int id;                     // 主键ID，唯一标识一种物料
    QString material_name;      // 物料名称，用于标识物料的名称信息
    QString model;              // 型号规格，描述物料的具体型号参数
    QString image;              // 图片路径，存储物料图片的相对/绝对路径
    int material_quantity;      // 物料剩余总数，记录该物料的总库存数量
    QDateTime create_time;      // 创建时间，记录物料信息的创建时间戳
    QDateTime update_time;      // 更新时间，记录物料信息最后修改的时间戳

public:
    /**
     * @brief 无参构造函数
     *
     * 初始化所有数值类型属性为0，字符串为空，
     * 时间戳为默认值，适合需要后续通过setter方法设置属性的场景。
     */
    Material()
        : id(0),
          material_quantity(0)
    {}

    /**
     * @brief 全参数构造函数
     *
     * 一次性初始化所有属性，适合从数据库读取记录后直接创建对象。
     *
     * @param id                物料ID
     * @param material_name     物料名称
     * @param model             型号规格
     * @param image             图片路径
     * @param material_quantity 物料剩余总数
     * @param create_time       创建时间戳
     * @param update_time       最后更新时间戳
     */
    Material(int id,
             const QString& material_name,
             const QString& model,
             const QString& image,
             int material_quantity,
             const QDateTime& create_time,
             const QDateTime& update_time)
        : id(id),
          material_name(material_name),
          model(model),
          image(image),
          material_quantity(material_quantity),
          create_time(create_time),
          update_time(update_time)
    {}

    // -------------------------- Getter 方法 --------------------------

    /**
     * @brief 获取物料ID
     * @return 物料的主键ID
     */
    int get_id() const { return id; }

    /**
     * @brief 获取物料名称
     * @return 物料的名称字符串
     */
    QString get_material_name() const { return material_name; }

    /**
     * @brief 获取物料型号
     * @return 物料的型号规格字符串
     */
    QString get_model() const { return model; }

    /**
     * @brief 获取物料图片路径
     * @return 物料图片的路径字符串
     */
    QString get_image() const { return image; }

    /**
     * @brief 获取物料剩余总数
     * @return 该物料的总库存数量
     */
    int get_material_quantity() const { return material_quantity; }

    /**
     * @brief 获取创建时间
     * @return 物料记录的创建时间戳
     */
    QDateTime get_create_time() const { return create_time; }

    /**
     * @brief 获取最后更新时间
     * @return 物料信息最后修改的时间戳
     */
    QDateTime get_update_time() const { return update_time; }

    // -------------------------- Setter 方法 --------------------------

    /**
     * @brief 设置物料ID
     * @param value 新的物料ID
     */
    void set_id(int value) { id = value; }

    /**
     * @brief 设置物料名称
     * @param value 新的物料名称
     */
    void set_material_name(const QString& value) { material_name = value; }

    /**
     * @brief 设置物料型号
     * @param value 新的型号规格
     */
    void set_model(const QString& value) { model = value; }

    /**
     * @brief 设置物料图片路径
     * @param value 新的图片路径
     */
    void set_image(const QString& value) { image = value; }

    /**
     * @brief 设置物料剩余总数
     * @param value 新的库存数量
     */
    void set_material_quantity(int value) { material_quantity = value; }

    /**
     * @brief 设置创建时间
     * @param value 新的创建时间戳
     */
    void set_create_time(const QDateTime& value) { create_time = value; }

    /**
     * @brief 设置最后更新时间
     * @param value 新的更新时间戳
     */
    void set_update_time(const QDateTime& value) { update_time = value; }
};

#endif // MATERIAL_H
